## A checker for the alternant decoder

from PyM import *

# # C is a code, t>0 the number of errors introduced, a suitable finite field
# def AD_checker(C,t,K=''):
#     if K=='': K = K_(C)
#     H = prune(blow(H_(C),K))
#     if G_(C)!= None:
#         G = G_(C)
#     else: 
#         G = left_kernel(transpose(H))
#     n = ncols(H)
#     x = rd_linear_combination(G,K)
#     e = rd_error_pattern(n,t,K)
#     x1 = alternant_decoder(x+e,C)
#     if isinstance(x1,Vector_type):
#         if x1==x:
#             show('AD_checker: trial successful')
#             return matrix([x,e,x+e])
#         else:
#             show('AD_checker: undectetable error')
#             return matrix(x,e,x+e,x1)
#     else:
#         show('AD_checker: decoder error')
#         return matrix([x,e])
# #
# decoder_trial = AD_checker
    
types_off()

[F,x] = GF(25) 
K = prime_field(F)
[_,T] = polynomial_ring(F,'T')

g = T**6+T**3+T+1

q = cardinal(F)

a = [pick(j,F) for j in range(1,q)]


a = vector([t for t in a if evaluate(g,t)!=0])

C = goppa(g,a)

show(AD_checker(C,1))

show(AD_checker(C,2))

show(AD_checker(C,3))

show(AD_checker(C,4))
